package cyvra;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.DefaultListModel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.ListModel;

/**
 *
 * @author CARDENASVAR
 */
public class frmProcesos extends javax.swing.JDialog {

    // Declaro variable de Conexion
    clsConnection oConn = new clsConnection();
    
    String strCveActual; 
    
    public frmProcesos(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
        
        this.setTitle("Procesos");
        
        //centra la forma
        this.setLocationRelativeTo(null);
        
        //longitudes de captura
        
        
        //Carga el listbox con los procesos
        SubProcesosCarga();
        
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        pnlProcesos = new javax.swing.JPanel();
        txtIde = new javax.swing.JTextField();
        txtNom = new javax.swing.JTextField();
        btnGrabar = new javax.swing.JButton();
        btnLimpiar = new javax.swing.JButton();
        btnAgregar = new javax.swing.JButton();
        jScrollPane2 = new javax.swing.JScrollPane();
        lstProcesos = new javax.swing.JList();
        lblProcesoIde = new javax.swing.JLabel();
        lblProcesoNombre = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

        pnlProcesos.setBorder(javax.swing.BorderFactory.createTitledBorder("Procesos del Sistema"));

        btnGrabar.setText("Grabar");
        btnGrabar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnGrabarActionPerformed(evt);
            }
        });

        btnLimpiar.setText("Limpiar");
        btnLimpiar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnLimpiarActionPerformed(evt);
            }
        });

        btnAgregar.setText("Agregar");
        btnAgregar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAgregarActionPerformed(evt);
            }
        });

        lstProcesos.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mousePressed(java.awt.event.MouseEvent evt) {
                lstProcesosMousePressed(evt);
            }
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                lstProcesosMouseClicked(evt);
            }
        });
        jScrollPane2.setViewportView(lstProcesos);

        lblProcesoIde.setText("Id Proceso");

        lblProcesoNombre.setText("Nombre del Proceso");

        javax.swing.GroupLayout pnlProcesosLayout = new javax.swing.GroupLayout(pnlProcesos);
        pnlProcesos.setLayout(pnlProcesosLayout);
        pnlProcesosLayout.setHorizontalGroup(
            pnlProcesosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlProcesosLayout.createSequentialGroup()
                .addGroup(pnlProcesosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(pnlProcesosLayout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(pnlProcesosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                            .addComponent(jScrollPane2)
                            .addGroup(pnlProcesosLayout.createSequentialGroup()
                                .addGroup(pnlProcesosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                    .addComponent(btnGrabar, javax.swing.GroupLayout.DEFAULT_SIZE, 92, Short.MAX_VALUE)
                                    .addComponent(txtIde))
                                .addGap(56, 56, 56)
                                .addGroup(pnlProcesosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlProcesosLayout.createSequentialGroup()
                                        .addComponent(btnLimpiar, javax.swing.GroupLayout.PREFERRED_SIZE, 74, javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                        .addComponent(btnAgregar))
                                    .addComponent(txtNom, javax.swing.GroupLayout.PREFERRED_SIZE, 242, javax.swing.GroupLayout.PREFERRED_SIZE)))))
                    .addGroup(pnlProcesosLayout.createSequentialGroup()
                        .addGap(28, 28, 28)
                        .addComponent(lblProcesoIde)
                        .addGap(150, 150, 150)
                        .addComponent(lblProcesoNombre)))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        pnlProcesosLayout.setVerticalGroup(
            pnlProcesosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlProcesosLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 209, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 24, Short.MAX_VALUE)
                .addGroup(pnlProcesosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblProcesoIde)
                    .addComponent(lblProcesoNombre))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(pnlProcesosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(txtIde, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(txtNom, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(pnlProcesosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnGrabar)
                    .addComponent(btnLimpiar)
                    .addComponent(btnAgregar))
                .addContainerGap())
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(20, 20, 20)
                .addComponent(pnlProcesos, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(36, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(pnlProcesos, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );

        pnlProcesos.getAccessibleContext().setAccessibleDescription("");

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void lstProcesosMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_lstProcesosMouseClicked
        // TODO add your handling code here:
        
        // Variable para obtener el indice seleccionado
    int iSeleccionado;
    
    // Obtiene el Elemento Seleccionado
    iSeleccionado=lstProcesos.getSelectedIndex();
    
        // Verifica si realmente seleccionó
        if (iSeleccionado>=0)
        {
            // Coloca el dato seleccionado en los text box
            txtIde.setText(lstProcesos.getSelectedValue().toString().substring(0,10));
            txtNom.setText(lstProcesos.getSelectedValue().toString().substring(11));

            // Guarda Clave Actual
            strCveActual=txtIde.getText();
        }
    }//GEN-LAST:event_lstProcesosMouseClicked

    //este evento es cuando se hace doble click en un elemento de la lista
    private void lstProcesosMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_lstProcesosMousePressed
        // TODO add your handling code here:
        
       // Declaro variable para obtener el seleccionado
    int iSeleccionado;
    String strIde;
    String strNom;
    String strSqlStmt;
    
    // Pregunto en el Parametro
    if (evt.getClickCount()==2)
    {
         
         // Obtiene el Elemento Seleccionado
         iSeleccionado=lstProcesos.getSelectedIndex();
         if (iSeleccionado>=0)
         {
            // Coloca el dato seleccionado en los text box
            strIde=lstProcesos.getSelectedValue().toString().substring(0,10);
            strNom=lstProcesos.getSelectedValue().toString().substring(11);

            // Prepara el Query para elimianr
            strSqlStmt =  " Delete From tblprocesos ";
            strSqlStmt += " Where strProcesoIde='"+strIde+"' ";
            strSqlStmt += " And   strProcesoNom='"+strNom+"' ";
            
            
            // Ejecuta el Update
            oConn.FnBoolQueryExecuteUpdate(strSqlStmt);
            
            //Carga los Procesos
            SubProcesosCarga();
            
         }
         
    }
    }//GEN-LAST:event_lstProcesosMousePressed

    private void btnLimpiarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnLimpiarActionPerformed
        // TODO add your handling code here:
        txtIde.setText("");
        txtNom.setText("");
    }//GEN-LAST:event_btnLimpiarActionPerformed

    private void btnGrabarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnGrabarActionPerformed
        // TODO add your handling code here:
        
        String strSqlStmt;
    
    
    // Valida los datos correctos
    if (FnBoolValidaDatos())
    {
        // Prepara el Query
        strSqlStmt  = " Update tblprocesos ";
        strSqlStmt += " Set strProcesoIde='"+txtIde.getText()+"', ";
        strSqlStmt += "     strProcesoNom='"+txtNom.getText()+"' ";
        strSqlStmt += " Where strProcesoIde='"+strCveActual+"' ";

        // Ejecuta el Query
        oConn.FnBoolQueryExecuteUpdate(strSqlStmt);

        // Carga los Procesos de Nueva Cuenta
        SubProcesosCarga();
    
    }
        
    }//GEN-LAST:event_btnGrabarActionPerformed

    private void btnAgregarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAgregarActionPerformed
        // TODO add your handling code here:
        
        String strSqlStmt;
    
        if (FnBoolValidaDatos())
        {
            // Prepara el Query
            strSqlStmt  = " Insert into tblprocesos (strProcesoIde,strProcesoNom) ";
            strSqlStmt += " Values ('"+txtIde.getText()+"','"+txtNom.getText()+"')";

            // Ejecuta el Query
            oConn.FnBoolQueryExecuteUpdate(strSqlStmt);

            // Carga los Procesos de Nueva Cuenta
            SubProcesosCarga();
        }
    }//GEN-LAST:event_btnAgregarActionPerformed

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /*
         * Set the Nimbus look and feel
         */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /*
         * If Nimbus (introduced in Java SE 6) is not available, stay with the
         * default look and feel. For details see
         * http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(frmProcesos.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(frmProcesos.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(frmProcesos.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(frmProcesos.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /*
         * Create and display the dialog
         */
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                frmProcesos dialog = new frmProcesos(new javax.swing.JFrame(), true);
                dialog.addWindowListener(new java.awt.event.WindowAdapter() {

                    @Override
                    public void windowClosing(java.awt.event.WindowEvent e) {
                        System.exit(0);
                    }
                });
                dialog.setVisible(true);
            }
        });
    }
    
    // Carga los procesos existentes en la lista
    private void SubProcesosCarga()
    {
        //para instruccion sql
        String sqlStmt;
        String sIdeProceso;
        String sNomProceso;
        
        //variable para agregar elementos a la lista
        DefaultListModel itemLista;
        itemLista = new DefaultListModel();
        
        //limpia el control
        lstProcesos.removeAll();
         
        //prepara variable paras realizar el query
        sqlStmt = "Select * from tblprocesos";
        
        if(oConn.FnBoolQueryExecute(sqlStmt))
        {
            try
            {
                //verifica resultados
                while (oConn.setResult.next()) //next---> se ejecuta hasta que no hallan resultados para mostrar
                {
                    //obtiene los datos de la consulta
                    sIdeProceso = oConn.setResult.getString("strProcesoIde");
                    sNomProceso = oConn.setResult.getString("strProcesoNom");
                    
                    //agrega el dato a la lista
                    itemLista.addElement(sIdeProceso+"-"+sNomProceso);
                }
                // agrega el dato a lista
                lstProcesos.setModel(itemLista);
                
                //cierra resultados
                oConn.setResult.close();
                
            }
            catch (SQLException ex)
            {
                JOptionPane.showMessageDialog(rootPane, ex);
                Logger.getLogger(frmProcesos.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
    
    //valida que los datos sean capturados
    boolean FnBoolValidaDatos()
    { 
        //variavblke para el mensaje
        String strMensaje = "";
        
        // Valida el Ide
        if (txtIde.getText().length()==0 || txtIde.getText().length()!=10)
        {
           strMensaje = "El Ide debe ser de 10 Caracteres:";
           txtIde.requestFocus();
        }
        
        // Valida el Nombre
        if (txtNom.getText().length()==0)
        {
           if (strMensaje.length()==0)
              txtNom.requestFocus();
           strMensaje = strMensaje + "\n"+"El Proceso debe ser de mas de 0 Caracteres:";
          
        }
                
        // Valida si faltaron datos
        if (strMensaje.length()>0)
        {
            // Construye el Mensaje
            strMensaje ="Debe Capturar los siguientes datos:\n"+strMensaje;
            
            // Muestra el Mensaje
            JOptionPane.showMessageDialog(this, strMensaje);
            
            // Retorna
            return false;
            
        }
        else
            
            return true;
    }
            
    
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnAgregar;
    private javax.swing.JButton btnGrabar;
    private javax.swing.JButton btnLimpiar;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JLabel lblProcesoIde;
    private javax.swing.JLabel lblProcesoNombre;
    private javax.swing.JList lstProcesos;
    private javax.swing.JPanel pnlProcesos;
    private javax.swing.JTextField txtIde;
    private javax.swing.JTextField txtNom;
    // End of variables declaration//GEN-END:variables
}
